﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace System.Windows.Media.Media3D10
{
    /// <summary>
    /// Représente une source de lumière qui a une position spécifiée dans l'espace et qui projette sa lumière dans toutes les directions.
    /// </summary>
    public sealed class PointLight : PointLightBase
    {
        #region Constructors
        /// <summary>
        /// Initialise une nouvelle instance de la classe <see cref="PointLight"/> à l'origine. 
        /// </summary>
        public PointLight()
        { }

        /// <summary>
        /// Initialise une nouvelle instance de la classe <see cref="PointLight"/> à la position spécifiée, à l'aide de la couleur spécifiée.
        /// </summary>
        /// <param name="diffuseColor">Couleur diffuse.</param>
        /// <param name="position">Position.</param>
        public PointLight(Color diffuseColor, SlimDX.Vector3 position)
        {
            this.Color = diffuseColor;
            this.Position = position;
        }
        #endregion

        #region Public Methods
        /// <summary>
        /// Crée un clone modifiable de ce <see cref="PointLight"/>, en créant des copies complètes des valeurs de cet objet.
        /// Lors de la copie de propriétés de dépendance, cette méthode copie les références de ressources et les liaisons de données (même si elles ne peuvent plus être résolues), mais pas les animations ni leurs valeurs actuelles.
        /// </summary>
        /// <returns>
        /// Clone modifiable de l'objet actuel.
        /// La valeur de la propriété <see cref="Freezable.IsFrozen"/> de l'objet cloné est false, même si la valeur de la propriété <see cref="Freezable.IsFrozen"/> de la source est true.
        /// </returns>
        public new PointLight Clone()
        {
            return base.Clone() as PointLight;
        }

        /// <summary>
        /// Crée un clone modifiable de ce <see cref="PointLight"/>, en créant des copies complètes des valeurs actuelles de cet objet.
        /// Contrairement à leurs valeurs actuelles, les références de ressources, les liaisons de données et les animations ne sont pas copiées.
        /// </summary>
        /// <returns>
        /// Clone modifiable de l'objet actuel.
        /// La valeur de la propriété <see cref="Freezable.IsFrozen"/> de l'objet cloné est false, même si la valeur de la propriété <see cref="Freezable.IsFrozen"/> de la source est true.
        /// </returns>
        public new PointLight CloneCurrentValue()
        {
            return base.CloneCurrentValue() as PointLight;
        }
        #endregion

        #region Freezable Implementation
        /// <summary>
        /// Une fois implémentée dans une classe dérivée, initialise une nouvelle instance de la classe dérivée <see cref="Freezable"/>. 
        /// </summary>
        /// <returns>Nouvelle instance.</returns>
        protected override Freezable CreateInstanceCore()
        {
            return new PointLight();
        }
        #endregion
    }
}
